package org.colswe.testingProject.control;

import org.colswe.testingProject.entity.SystemRoles;
import org.colswe.testingProject.entity.SystemUser;

/**
 * Clase AuthenticationControl para el manejo de autenticación.
 *
 * @author andres
 */
public class AuthenticationControl {

    /**
     * Constante 5.
     */
    private static final int CINCO = 5;
    /**
     * Constante 30.
     */
    private static final int TRES0 = 30;
    /**
     * Constante 20.
     */
    private static final int DOS0 = 20;

    /**
     * Función para obtener el rol del SystemUser.
     *
     * @param systemUser SystemUser a logear.
     * @return Rol del SystemUser, null si no es user o contraseña mal
     * suministrada
     */
    public SystemRoles systemUserRoles(SystemUser systemUser) {
        SystemUserControl controlSystemUser = new SystemUserControl();
        SystemUser other;
        other = controlSystemUser.read(systemUser);
        if (other == null) {
            return null;
        } else if (systemUser.getPassword().equals(other.getPassword())) {
            return other.getUserRole();
        } else {
            return null;
        }
    }

    /**
     * validación del formato del UserName.
     *
     * @param userName userName a verificar.
     * @return Verdadero si es correcto.
     */
    public boolean userNameFormatValidation(String userName) {
        return !(userName.contains(" "));
    }

    /**
     * Validador de longitud de nombre de usuario.
     *
     * @param userName Nombre de usuario a validar.
     * @return verdadero si es válido.
     */
    public boolean userNameLengthValidation(String userName) {
        return (userName.length() <= DOS0 && userName.length() >= CINCO);
    }

    /**
     * Validación de nombre de usuario.
     *
     * @param userName Nombre de usuario a Validar.
     * @return Verdadero si es válido.
     */
    public boolean userNameValidation(String userName) {
        return userNameFormatValidation(userName) && userNameLengthValidation(userName);
    }

    /**
     * Validador de nombre de usuario único.
     *
     * @param systemUser SystemUser a validar.
     * @return Verdadero si está disponible.
     */
    public boolean userNameUniquenessValidation(SystemUser systemUser) {
        SystemUserControl controlSystemUser = new SystemUserControl();
        SystemUser other;
        other = controlSystemUser.read(systemUser);
        return (other == null);
    }

    /**
     * Validador de longitud de contraseña.
     *
     * @param password Contraseña a validar.
     * @return Verdadero si es válida.
     */
    public boolean passwordLengthValidation(String password) {
        return (password.length() <= TRES0 && password.length() >= CINCO);
    }

    /**
     * validador de formato de la contraseña.
     *
     * @param password Contraseña a validar.
     * @return Verdadero si es válida.
     */
    public boolean passwordFormatValidation(String password) {
        return password.matches("[[[A-Z]+][[a-z]+][[0-9]+]]+");
    }

    /**
     * Validación de confirmación de contraseña.
     *
     * @param password Contraseña.
     * @param passwordC Confirmación contraseña.
     * @return Vedadero si concuerdan.
     */
    public boolean passwordConfirmationValidation(String password, String passwordC) {
        return password.equals(passwordC);
    }

    /**
     * Validación de contraseña.
     *
     * @param password Contraseña a validar.
     * @return Verdadero si es válida.
     */
    public boolean passwordValidation(String password) {
        boolean result = passwordLengthValidation(password)
                && passwordLengthValidation(password);
        return result;
    }
}
